

package com.hazelcast.jet.impl;

import com.hazelcast.cache.ICache;
import com.hazelcast.jet.JetCacheManager;
import com.hazelcast.jet.JetInstance;

/**
 * Hazelcast Jet {@code JetCacheManager} implementation accessible via {@code JetInstance} that provides access to JSR-107
 * (JCache) caches configured on the cluster via Hazelcast API.
 *
 * @see JetCacheManager
 */
public class JetCacheManagerImpl implements JetCacheManager {

    private final JetInstance jetInstance;

    JetCacheManagerImpl(JetInstance jetInstance) {
        this.jetInstance = jetInstance;
    }

    @Override
    public <K, V> ICache<K, V> getCache(String name) {
        return CacheGetter.getCache(jetInstance, name);
    }

    /**
     * This class is necessary to conceal the cache-api
     */
    private static class CacheGetter {

        private static <K, V> ICache<K, V> getCache(JetInstance jetInstance, String name) {
            return new ICacheDecorator<>(jetInstance.getHazelcastInstance().getCacheManager().getCache(name), jetInstance);
        }

    }
}
